/* Shift-JIS */
/* UTF-8 */
/********************************************************************************
* Copyright DENSO CORPORATION
*
* ソース名:
*　　lib_func.h
*
* 機能:
*　　ライブラリ関数をカプセル化するヘッダファイル
*
* 作成者:
*　　2010/06 関（CBSﾃｸﾉ）

********************************************************************************
変更履歴:
　2010/06　関　　新規作成
********************************************************************************/
#ifndef _LIB_FUNCTION_H_
#define _LIB_FUNCTION_H_
#include <sys/stat.h>
#include <dirent.h>
#include <stdarg.h>
#include <math.h>
#include "Id.h"

#define  str_gotoend(str)   (((str)==NULL)?(NULL): strchr( str, '\0'))
#define  str_findchar(str,c,p)   (((str)&&((p)=strchr((str),(c)))&&(*(p)==(c)))?(p):NULL)
#define  str_findchar_back(str,c,p)   (((str)&&((p)=strrchr((str),(c)))&&(*(p)==(c)))?(p):NULL)
#define  str_length(str)  (((str)==NULL)?0:strlen(str))

#ifdef assert
#undef assert
#endif
#define assert( a ) ((a) ? (VOID)0 : (VOID)fprintf( stdout, "%s:%d:%s\n", __FILE__, __LINE__, #a ) )



#if (__OS__ == _WINDOWS_XP ) || (__OS__ == _WINDOWS_7)
#define getfilestat _stat
#define _filestat _stat
#define  IS_FOLDER( sbuf )  (( sbuf.st_mode & S_IFMT ) == S_IFDIR)
#define makenewdir(a)  _mkdir(a)
#define  getCurWorkDir   _getcwd
#define  ENV_PATH_DELIMITER	";"
#define  MAX_PATH_LEN 4096
#define cmpPath  stricmp
#define IsFullPath IsFullPath_Windows
#define GetFullPath GetFullPath_Windows
#define IS_FINITE(db) isfinite(db)
#else
#define getfilestat stat
#define _filestat stat
#define  IS_FOLDER( sbuf )  (( sbuf.st_mode & S_IFMT ) == S_IFDIR)
#define makenewdir(a)  mkdir(a, 0777 )
#define  getCurWorkDir   getcwd
#define  ENV_PATH_DELIMITER	":"
#define  MAX_PATH_LEN 4096
#define cmpPath  strcmp
#define IsFullPath IsFullPath_UNIX
#define GetFullPath GetFullPath_UNIX
#define IS_FINITE(db) isfinite(db)
#endif
PSZ   libStrSkipSpace( PSZ pszLine );
/*D*/
/************************************************************************
 * 関 数 名 : libStrTrimStr
 * 機    能 : 行前後の半角スペースとタブを削除
 * 引    数 :
 * @pszLine   1行の文字列
 * 戻 り 値 :
 * 　PSZ　削除した後、残った文字列
************************************************************************/
PSZ   libStrTrimStr( PSZ pszLine );
/*D*/
/************************************************************************
 * 関 数 名 : libStrDelSharpComment
 * 機    能 : 行のコメント（#）を削除してから、行前後の半角スペースとタブを削除
 * 引    数 :
 * @pszLine   1行の文字列
 * @bPartlyComment  行途中のコメントが許されるかのフラグ
 * 戻 り 値 :
 * 　PSZ　削除した後、残った文字列
************************************************************************/
PSZ   libStrDelSharpComment( PSZ pszLine, BOOL bPartlyComment );
/*D*/
/************************************************************************
 * 関 数 名 : libStrCmpWildCard
 * 機    能 : ワイルドカード有の文字列比較
 * 　　　　　　*  任意個の任意文字
 * 　　　　　　?　1個の任意文字
 * 引    数 :
 *　 @strA  文字列A
 * 　@strB  文字列B
 * 戻 り 値 :
 * 　S4　　　0　　一致
 * 　　　　　-1　　strA < strB
 *           1    strA > strB
************************************************************************/
S4   libStrCmpWildCard( PSZ strA, PSZ strB );
/*D*/
/************************************************************************
 * 関 数 名 : libStrSearchWildChar
 * 機    能 : ワイルドカード有無を確認
 * 　　　　　　*  任意個の任意文字
 * 　　　　　　?　1個の任意文字
 * 引    数 :
 *　 @strA  文字列
 * 戻 り 値 :
 * 　TRUE　　あり
 * 　FALSE　　なし
************************************************************************/
BOOL libStrSearchWildChar ( PSZ pszPath );
/*D*/
/************************************************************************
 * 関 数 名 : libStrBreakByDelimiter
 * 機    能 : 指定された区切子(1文字)により文字列を分割する
 * 引    数 :
 *　 @strA  文字列
 * 　@strB  区切子の並び
 * 戻 り 値 :
 * 　U4  行列番号を返す。
************************************************************************/
U4   libStrBreakByDelimiter( PSZ strA, PSZ strB );
/*D*/
/************************************************************************
 * 関 数 名 : libStrGetNextStr
 * 機    能 : 分割された文字列を1つずつ取得する。
 * 引    数 :
 *　 @u4_QueueNo  libStrBreakByDelimiterが返した行列番号
 * 戻 り 値 :
 * 　PSZ 　コール度、分割された文字列を順に返す。
 ************************************************************************/
PSZ   libStrGetNextStr( U4 u4_QueueNo );
/*D*/
/************************************************************************
 * 関 数 名 : libStrGetSymbolLength
 * 機    能 : 引数の文字列から、シンボルとみなせる文字列の長さ
 * 引    数 :
 *　 @pszSymbol 　文字列
 * 戻 り 値 :
 * 　U4   文字数
************************************************************************/
U4   libStrGetSymbolLength( PSZ  pszSymbol );
/*D*/
/************************************************************************
 * 関 数 名 : libOSGetModuleFile
 * 機    能 : ツールのインストール先を取得する
 * 引    数 :
 *　 @pszBuffer 　ツールのインストール先を保存するバッファー
 *　 @lenBuf　ツールのインストール先を保存するバッファーの長さ
 * 戻 り 値 :
 * S4 正常の場合、ツールのインストール先のフォルダの文字数を返す。
 *   失敗の場合、0を返す。
************************************************************************/
S4  libOSGetModuleFile( PSZ pszToolName, PSZ pszBuffer, U4 lenBuf );
/************************************************************************
 * 関 数 名 : libOSConnectPath
 * 機    能 : pszSrcはpszStandardからの相対パスである場合、pszSrcとpszStandardをくっつけて、
 *      . か  .. を削除する。
 * 引    数 :
 *　 @pszStandard 　基準
 *　 @pszSrc　相対パス
************************************************************************/
VOID  libOSConnectPath( PSZ pszStandard, PSZ pszSrc);
/************************************************************************
 * 関 数 名 : libOSIsAbsolutePath
 * 機    能 : pszSrcは絶対パスかをチェックする
 * 引    数 :
 *　 @pszSrc　パス
 * 戻 り 値 :
 *  TRUE
 *  FALSE
************************************************************************/
BOOL  libOSIsAbsolutePath(  PSZ pszSrc );
/************************************************************************
 * 関 数 名 : libOSGetPortablePath(  PSZ pszSrc )
 * 機    能 : pszSrcは絶対パスかをチェックする
 * 引    数 :
 *　 @pszSrc　パス
************************************************************************/
VOID  libOSGetPortablePath(  PSZ pszSrc );

PSZ ToolSettingGetKeywordStr(PSZ name);
#endif

